# 用自己下载的PLY文件

import open3d as o3d
import numpy as np

print("斯坦福兔子")

# 这里要注意的一点是，在写文件地址的时候引号前面要加上r
# ply_point_cloud_path = r"D:\AllCode\3D Point Cloud\Open3D\Notes\Part 1 Visualize point cloud\Try\bun_zipper.ply"

# 当你的代码和文件在一个文件夹下时，也可以用相对路径的方式获取文件地址
# 但是这里存在一个问题： 相对路径的 基准目录 是 Python 运行时的 工作目录，而非脚本所在目录。
#                      如果你的工作目录和你的点云数据文件不在一个路径下，那你获取的就会是空
# ply_point_cloud_path = "bun_zipper.ply"

# 所以更推荐的是第一种或者下面的动态获取脚本路径
import os 
# 获取当前脚本所在的文件夹路径
current_dir = os.path.dirname(os.path.abspath(__file__)) 
# 2. 拼接 .ply 文件的路径，因为和脚本同目录，直接用文件名
ply_point_cloud_path = os.path.join(current_dir, "bun_zipper.ply")  

pcd = o3d.io.read_point_cloud(ply_point_cloud_path)

print(pcd)
print(np.asarray(pcd.points))

o3d.visualization.draw_geometries([pcd])

# 输出结果成功
# 和例程给的代码相比，斯坦福兔子的显示并没有那么真实
# 因为，点云存储的不仅仅是点的三维坐标，还有这些点的额外特征属性，例如色彩、纹理等
# 当点云所包含的特征属性越丰富，也就是点的信息维度越高，可视化时能还原的细节越就越多，也就越接近真实效果
